package com.atguigu.spzx.common.handler;

import com.atguigu.spzx.common.handler.exception.SpzxException;
import com.atguigu.spzx.model.result.Result;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
@Slf4j
//@ControllerAdvice 当controller接口出现异常时，它的异常处理器可以返回转发或重定向视图
public class SpzxGlobalExceptionHandler {
    //表示当前方法处理controller中出现的Exception异常
    @ExceptionHandler(value = Exception.class)
    public Result exception(Exception e){
        //获取异常对象的堆栈消息打印
        if(e!=null){
            log.error("出现异常：{}" , ExceptionUtils.getStackTrace(e));
        }
        return Result.fail();//返回默认的失败的Result
        // 为了更精确的给前端(开发+用户) 提示
        // code值和message需要精确的显示异常信息
        // 我们可以自定义异常类：添加自定义属性code和message方便携带异常信息
    }
    //自定义异常的处理器：可以获取自定义异常的code message值创建Result对象
    @ExceptionHandler(value = SpzxException.class)
    public Result exception(SpzxException e){
        //获取异常对象的堆栈消息打印
        if(e.getE()!=null){
            log.error("出现异常：{}" , ExceptionUtils.getStackTrace(e.getE()));
        }
        return Result.fail()
                .code(e.getCode())
                .message(e.getMessage());//返回默认的失败的Result
    }

}
